package com.eastfair.venuebooking.dto;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 客户 DTO.
 *
 * @author dqq
 * @date 2022 /6/24
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false)
@Builder
public class CustomerMainDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    public interface Save {
    }

    public interface Update {
    }

    public interface Public {
    }

    public interface Assign {
    }

    public interface Silence {
    }

    public interface Star {
    }

    @NotNull(message = "客户id不可为空", groups = {CustomerMainDTO.Silence.class})
    @ApiModelProperty(value = "id")
    private Long id;

    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    private Integer isEnabled;
    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    private Integer isDeleted;
    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    private Long projectId;
    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    private Long subsystemId;
    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    private Long tenantId;
    /**
     * 归属人员
     */
    @ApiModelProperty(value = "归属人员")
    @NotNull(message = "归属人员不能为空", groups = {CustomerMainDTO.Save.class, CustomerMainDTO.Silence.class})
    private Long belongTo;
    /**
     * 归属人员姓名
     */
    @ApiModelProperty(value = "归属人员姓名")
    @NotBlank(message = "归属人员姓名不能为空", groups = {CustomerMainDTO.Silence.class})
    private String belongToName;
    /**
     * 归属人员部门id
     */
    @ApiModelProperty(value = "归属人员部门id")
    private Long orgCode;
    /**
     * 归属人员部门名称
     */
    @ApiModelProperty(value = "归属人员部门名称")
    private String orgName;

    /**
     * 前归属部门
     */
    @ApiModelProperty(value = "前归属部门")
    private Long lastOrgCode;

    /**
     * 前归属部门名称
     */
    @ApiModelProperty(value = "前归属部门名称")
    private String lastOrgName;
    /**
     * 客户中文名称
     */
    @ApiModelProperty(value = "客户中文名称")
    @Size(max = 75, message = "客户名称长度不能超过75", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "客户名称不能为空", groups = {CustomerMainDTO.Save.class})
    private String customerCnName;
    /**
     * 客户中文名称拼音
     */
    @ApiModelProperty(value = "客户中文名称拼音")
    @Size(max = 255, message = "客户中文名称拼音长度不能超过255")
    private String customerNamePinyin;
    /**
     * 客户英文名称
     */
    @ApiModelProperty(value = "客户英文名称")
    @Size(max = 255, message = "客户英文名称长度不能超过255", groups = {CustomerMainDTO.Save.class})
    private String customerEnName;
    /**
     * 客户简称
     */
    @ApiModelProperty(value = "客户简称")
    @Size(max = 75, message = "客户简称长度不能超过75", groups = {CustomerMainDTO.Save.class})
    private String customerShortName;
    /**
     * 客户性质，同名数据字典
     */
    @ApiModelProperty(value = "客户性质，同名数据字典")
    @Size(max = 64, message = "客户性质长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String customerProperty;
    /**
     * 所属行业(同名数据字典)
     */
    @ApiModelProperty(value = "所属行业(同名数据字典)")
    @Size(max = 64, message = "所属行业长度不能超过64", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "所属行业不能为空", groups = {CustomerMainDTO.Save.class})
    private String customerIndustry;
    /**
     * 客户状态(同名数据字典)
     */
    @ApiModelProperty(value = "客户状态(同名数据字典)")
    @Size(max = 64, message = "客户状态长度不能超过64", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "客户状态不能为空", groups = {CustomerMainDTO.Save.class})
    private String customerStatus;
    /**
     * 统一社会信用代码
     */
    @ApiModelProperty(value = "统一社会信用代码")
    @Size(max = 255, message = "统一社会信用代码长度不能超过255", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "统一社会信用代码不能为空", groups = {CustomerMainDTO.Save.class})
    private String uscc;
    /**
     * 客户星级，同名字典
     */
    @ApiModelProperty(value = "客户星级，同名字典")
    @Size(max = 64, message = "客户星级长度不能超过64", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "客户星级不能为空", groups = {CustomerMainDTO.Save.class})
    private String customerLevel;
    /**
     * 客户类型，同名数据字典
     */
    @ApiModelProperty(value = "客户类型，同名数据字典")
    @Size(max = 64, message = "客户类型长度不能超过64", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "客户类型不能为空", groups = {CustomerMainDTO.Save.class})
    private String customerType;
    /**
     * 客户来源，同名数据字典
     */
    @ApiModelProperty(value = "客户来源，同名数据字典")
    @Size(max = 64, message = "客户来源长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String customerSource;
    /**
     * 地区
     */
    @ApiModelProperty(value = "地区")
    @Size(max = 255, message = "地区长度不能超过255", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "所在地区不能为空", groups = {CustomerMainDTO.Save.class})
    private String region;
    /**
     * 详细地址
     */
    @ApiModelProperty(value = "详细地址")
    @Size(max = 255, message = "详细地址长度不能超过255", groups = {CustomerMainDTO.Save.class})
    @NotBlank(message = "详细地址不能为空", groups = {CustomerMainDTO.Save.class})
    private String address;
    /**
     * 固定电话
     */
    @ApiModelProperty(value = "固定电话")
    @Size(max = 64, message = "固定电话长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String phone;
    /**
     * 传真号码
     */
    @ApiModelProperty(value = "传真号码")
    @Size(max = 64, message = "传真号码长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String faxNo;
    /**
     * 电子邮箱
     */
    @ApiModelProperty(value = "电子邮箱")
    @Size(max = 64, message = "电子邮箱长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String email;
    /**
     * QQ号码
     */
    @ApiModelProperty(value = "QQ号码")
    @Size(max = 20, message = "QQ号码长度不能超过20", groups = {CustomerMainDTO.Save.class})
    private String qq;
    /**
     * 企业网址
     */
    @ApiModelProperty(value = "企业网址")
    @Size(max = 64, message = "企业网址长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String website;
    /**
     * 企业规模，同名数据字典
     */
    @ApiModelProperty(value = "企业规模，同名数据字典")
    @Size(max = 64, message = "企业规模长度不能超过64", groups = {CustomerMainDTO.Save.class})
    private String companyScale;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 1000, message = "备注长度不能超过1000", groups = {CustomerMainDTO.Save.class})
    private String remark;
    /**
     * 公众号，图片地址
     */
    @ApiModelProperty(value = "公众号，图片地址")
    @Size(max = 255, message = "公众号，图片地址长度不能超过255", groups = {CustomerMainDTO.Save.class})
    private String wechatQrcodeUrl;
    /**
     * 最后跟进时间
     */
    @ApiModelProperty(value = "最后跟进时间")
    private LocalDateTime lastFollowDate;
    /**
     * 前归属人
     */
    @ApiModelProperty(value = "前归属人")
    private Long lastBelongTo;
    /**
     * 前归属人姓名
     */
    @ApiModelProperty(value = "前归属人姓名")
    @Size(max = 255, message = "前归属人姓名长度不能超过255", groups = {CustomerMainDTO.Save.class})
    private String lastBelongToName;
    /**
     * 下次跟进时间
     */
    @ApiModelProperty(value = "下次跟进时间")
    private LocalDateTime nextFollowDate;
    /**
     * 客户状态(0正常 1公海 2垃圾 3静默客户)
     */
    @ApiModelProperty(value = "客户状态(0正常 1公海 2垃圾 3静默客户)")
    private Integer state;

    /**
     * cms系统同步状态 0:待同步;1:已同步
     */
    @ApiModelProperty(value = "cms系统同步状态 0:待同步;1:已同步")
    private Integer cmsSync;
}
